package com.tangruojie.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

/**
 * 事务隔离（Transaction Isolation）是数据库中非常重要的概念，用来控制多个事务并发执行时对数据的可见性和互相影响的程度。它是保证数据一致性的关键机制之一。
 * Spring 枚举	                    对应 SQL 标准
 * Isolation.READ_UNCOMMITTED	    最低，允许脏读
 * Isolation.READ_COMMITTED	        常用，禁止脏读
 * Isolation.REPEATABLE_READ	    MySQL 默认
 * Isolation.SERIALIZABLE	        完全串行，最安全最慢
 * Isolation.DEFAULT	            使用数据库默认级别（MySQL 就是 REPEATABLE READ）
 */
public class MybatisConfig {

    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        ssfb.setTypeAliasesPackage("com.tangruojie.domain");
        ssfb.setDataSource(dataSource);
        return ssfb;
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.tangruojie.dao");
        return msc;
    }

}



